using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._CartographyTools._GraphicConflicts
{
    /// <summary>
    /// <para>Resolve Road Conflicts</para>
    /// <para>Resolves graphic conflicts among symbolized road features by adjusting portions of line segments.</para>
    /// <para>通过调整线段的各个部分来解决符号化道路要素之间的图形冲突。</para>
    /// </summary>    
    [DisplayName("Resolve Road Conflicts")]
    public class ResolveRoadConflicts : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public ResolveRoadConflicts()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_layers">
        /// <para>Input Road Layers</para>
        /// <para>The input feature layers containing symbolized road features that may be in conflict.</para>
        /// <para>包含可能存在冲突的符号化道路要素的输入要素图层。</para>
        /// </param>
        /// <param name="_hierarchy_field">
        /// <para>Hierarchy Field</para>
        /// <para>The field that contains hierarchical ranking of feature importance in which 1 is very important and larger integers reflect decreasing importance. A value of 0 (zero) locks the feature to ensure that it is not moved. The hierarchy field must be present and named the same for all input feature classes.</para>
        /// <para>包含特征重要性的分层排名的字段，其中 1 非常重要，较大的整数表示重要性递减。值为 0（零）将锁定要素以确保其不被移动。对于所有输入要素类，层次字段必须存在且名称相同。</para>
        /// </param>
        public ResolveRoadConflicts(List<object> _in_layers, object _hierarchy_field)
        {
            this._in_layers = _in_layers;
            this._hierarchy_field = _hierarchy_field;
        }
        public override string ToolboxName => "Cartography Tools";

        public override string ToolName => "Resolve Road Conflicts";

        public override string CallName => "cartography.ResolveRoadConflicts";

        public override List<string> AcceptEnvironments => ["cartographicCoordinateSystem", "cartographicPartitions", "referenceScale"];

        public override object[] ParameterInfo => [_in_layers, _hierarchy_field, _out_displacement_features, _out_layers];

        /// <summary>
        /// <para>Input Road Layers</para>
        /// <para>The input feature layers containing symbolized road features that may be in conflict.</para>
        /// <para>包含可能存在冲突的符号化道路要素的输入要素图层。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Road Layers")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public List<object> _in_layers { get; set; }


        /// <summary>
        /// <para>Hierarchy Field</para>
        /// <para>The field that contains hierarchical ranking of feature importance in which 1 is very important and larger integers reflect decreasing importance. A value of 0 (zero) locks the feature to ensure that it is not moved. The hierarchy field must be present and named the same for all input feature classes.</para>
        /// <para>包含特征重要性的分层排名的字段，其中 1 非常重要，较大的整数表示重要性递减。值为 0（零）将锁定要素以确保其不被移动。对于所有输入要素类，层次字段必须存在且名称相同。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Hierarchy Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _hierarchy_field { get; set; }


        /// <summary>
        /// <para>Output Displacement Feature Class</para>
        /// <para>The output polygon features containing the degree and direction of road displacement that will be used by the Propagate Displacement tool to preserve spatial relationships.</para>
        /// <para>输出面要素包含道路位移的程度和方向，传播位移工具将使用这些位移来保留空间关系。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Displacement Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _out_displacement_features { get; set; } = null;


        /// <summary>
        /// <para>Output Layers</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Layers")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public List<object> _out_layers { get; set; }


        public ResolveRoadConflicts SetEnv(object cartographicCoordinateSystem = null, object cartographicPartitions = null, object referenceScale = null)
        {
            base.SetEnv(cartographicCoordinateSystem: cartographicCoordinateSystem, cartographicPartitions: cartographicPartitions, referenceScale: referenceScale);
            return this;
        }

    }

}